package org.shj.pattern.builder

/**
 * 建造者模式： 将一个复杂对象的构建与它的表示分离， 使得同样的构建过程可以创建不同的表示
 * 主要用于创建一些复杂的对象，这些对象内部构建间的建造顺序通常是稳定的，但对象内部的构建通常面临着复杂的变化
 * 
 * 优点： 1. 建造者独立，易扩展   2. 便于控制细节风险
 * 缺点： 1. 产品必须有共同点，范围有限制   2. 内部变化复杂，会有很多的建造类
 * 使用场景： 1. 需要生成的对象具有复杂的内部结构。  2. 需要生成的对象内部属性本身相互依赖
 * 注意事项： 与工厂模式的区别是： 建造者模式更加关注与零件装配的顺序
 * 
 * 建造者模式与模板模式的区别
 * 1. 建造者模式是创建型模式 -- 着重对象的构建
 * 2. 建造者模式中的指挥者是建造者模式的灵魂
 * 3. 模板模式是行为型模式  -- 着重类的行为
 * 4. 个人认为建造者模式去掉指挥者就是模板模式
 * 
 * Builder -- 建造Product的抽象类
 * Director -- 建造Product的过程
 * @author huangjian
 *
 */
object Main {
  def main(args: Array[String]): Unit = {
    val director = new Director
    
    val hua = new HuaWei
    val huaWeiCellPhone = director.buildCellPhone(hua)
    huaWeiCellPhone.show
    
    val apple = new Iphone
    val iphone = director.buildCellPhone(apple)
    iphone.show
  }
}